1. Field of the Invention
The present invention relates to bus architectures for computer systems. More specifically, the present invention relates to a bus architecture that can be configured through software control to selectively switch peripheral devices between different buses in order to improve system performance.
2. Related Art
Computer systems typically communicate with peripheral devices through a peripheral bus that is shared between a number of peripheral devices. This arrangement works well for the majority of peripheral devices, because most peripheral devices make limited use of the peripheral bus. However, as the performance of computer systems and peripheral devices continues to increase, some peripheral devices are beginning to encounter performance problems caused by contention between peripheral devices for access to the shared peripheral bus.
In order to overcome these performance limitations, some computer systems use a separate dedicated high-speed bus to communicate with a peripheral device requiring a large amount of capacity from a peripheral bus. For example, some computer systems have a separate bus for communicating with a graphics acceleratorxe2x80x94such as the AGP bus found in many personal computer systems. This architecture works well for computer systems that require large amounts of bus capacity for a particular task, such a processing graphical images. However, this architecture is also inflexible because once the computer system is configured to provide bus capacity for a particular peripheral device, such as a graphics accelerator, it cannot be reconfigured for other tasks that require large amounts of bus capacity for other peripheral devices. For example, a computer system that is used as a file server may require large amounts of bus capacity for accesses to a disk subsystem, and a computer system that is used as a network server may require large amounts of bus capacity for a network subsystem.
What is needed is a computer system with a bus architecture that can selectively provide dedicated bus capacity to more than one peripheral device.
One embodiment of the present invention provides a computer system that selectively switches a plurality of peripheral devices between a plurality of buses in order to improve computer system performance. This computer system includes a number of peripheral devices, including a first peripheral device and a second peripheral device, as well as a number of buses, including a first bus and a second bus. The computer system also includes a configuration register that receives bus configuration information from a processor executing a program. This bus configuration information specifies whether the first peripheral device is coupled to the first bus or the second bus, and whether the second peripheral device is coupled to the first bus or the second bus. The computer system also includes a switching mechanism that operates under control of the configuration register. This switching mechanism couples the first peripheral device to either the first bus or the second bus, and couples the second peripheral device to either the first bus or the second bus.
In one embodiment of the present invention, the first bus is a shared bus coupled to more than one peripheral device and the second bus is a high-speed bus coupled to at most one peripheral device.
In one embodiment of the present invention, the apparatus additionally includes a tracking mechanism that gathers usage information from the first peripheral device and the second peripheral device, and determines from this usage information which one of the first peripheral device and the second peripheral device is most active. It also includes a writing mechanism that writes the configuration information into the configuration register to specify that the most active peripheral device is to be coupled to the second bus so that the most active peripheral device has exclusive access to the second bus.
In one embodiment of the present invention, the first peripheral device and the second peripheral device can include a video subsystem, a disk subsystem and a network subsystem.